package jdbc_05;
import jdbc_01.Conexion;

public class CallableStatementCreate {
    
    private Conexion con;
    private java.sql.Statement stmt;
    private javax.swing.JTextArea jta = new javax.swing.JTextArea(10, 35);
    
    public CallableStatementCreate() {
        Conexion.driverOdbc();
        con = new Conexion("empleados", "empleados", "empleados");
        if (con.abrirConexion()) {
            crearProcedures();
            crearFunciones();
            con.cerrarConexion();
            javax.swing.JOptionPane.showMessageDialog(null,
                                    new javax.swing.JScrollPane(jta));
        }
    }

    void crearProcedures() {
        String insDepto = "create procedure ins_depto "
                        + "( @id smallint, @depto varchar(30) ) "
                        + "as insert departamentos "
                        + "values(@id, @depto)";
        ejecutar(insDepto);
        jta.append("procedure ins_depto creada");
        
        String verProye = "create procedure ver_proyectos as "
                        + "select proyecto from proyectos order by 1";
        ejecutar(verProye);
        jta.append("\nprocedure ver_proyectos creada");
        
        String totalProye = "create procedure total_proyectos " 
			  + "( @cant int Output ) as "
			  + "select @cant=count(*) from proyectos";
	ejecutar(totalProye);
        jta.append("\nprocedure total_proyectos creada");
        
        String parcialProye = "create procedure parcial_proyectos " 
			  + "( @param int Output ) as "
                          + "declare @cant int "
			  + "select @cant=count(*) from proyectos "
                          + "where idproye > @param "
                          + "select @param = @cant";
	ejecutar(parcialProye);
        jta.append("\nprocedure parcial_proyectos creada");
        
        String cantProye = "create procedure cantidad_proyectos " 
			  + "as "
			  + "return (select count(*) from proyectos)";
	ejecutar(cantProye); 
        jta.append("\nprocedure cantidad_proyectos creada");
    }
    
    void crearFunciones() {
        String totalProye = "create function fn_total_proyectos() " 
			  + "returns int " 
                          + "as "
                          + "begin "
                          + "declare @cant int "
			  + "select @cant=count(*) from proyectos "
                          + "return (@cant) "
                          + "end";

	ejecutar(totalProye);
        jta.append("\nfunction fn_total_proyectos creada");
        
        String parcialProye = "create function "
                          + "fn_parcial_proyectos (@id int) " 
			  + "returns int " 
                          + "as "
                          + "begin "
                          + "declare @cant int "
			  + "select @cant=count(*) from proyectos "
                          + "where idproye > @id "
                          + "return (@cant) "
                          + "end";
	ejecutar(parcialProye);        
        jta.append("\nfunction fn_parcial_proyectos creada");
    }        
    
    void ejecutar(String sentencia) {
        try {
            stmt = con.getCon().createStatement();
            stmt.execute(sentencia);
            stmt.close();
        }
        catch( java.sql.SQLException e ) {
                jta.append("\n" + e.getMessage() );
        }
    }

    public static void main(String[] args) {
        new CallableStatementCreate();
        System.exit(0);
    }    
}
